import { ObjectDirective, DirectiveBinding } from 'vue'
import permissionHelper from '../permissionHelper'

/**
 * 权限指令
 * 用法：
 * v-permission="'user:create'" - 单个权限
 * v-permission="['user:create', 'user:edit']" - 多个权限，满足其一即可
 * v-permission.all="['user:create', 'user:edit']" - 多个权限，必须全部满足
 * v-permission.except="'user:delete'" - 除了指定权限外都可见
 */
export const permission: ObjectDirective = {
  mounted(el: HTMLElement, binding: DirectiveBinding) {
    const { value, modifiers } = binding
    
    try {
      // 超级管理员可以访问所有内容
      if (permissionHelper.isSuperAdmin()) {
        return // 超级管理员直接返回，不做权限检查
      }
      
      // 如果没有指定权限，则默认可见
      if (!value) return
      
      let hasPermission = false
      
      // 排除模式 - 除了指定权限外都可见
      if (modifiers.except) {
        if (typeof value === 'string') {
          // 单个权限
          hasPermission = !permissionHelper.hasPermission(value)
        } else if (Array.isArray(value)) {
          // 多个权限
          hasPermission = !value.some(p => permissionHelper.hasPermission(p))
        }
      } else {
        // 普通模式
        if (typeof value === 'string') {
          // 单个权限
          hasPermission = permissionHelper.hasPermission(value)
        } else if (Array.isArray(value)) {
          // 多个权限
          if (modifiers.all) {
            // 必须全部满足
            hasPermission = permissionHelper.hasAllPermissions(value)
          } else {
            // 满足其一即可
            hasPermission = permissionHelper.hasAnyPermission(value)
          }
        }
      }
      
      // 如果没有权限，则隐藏元素
      if (!hasPermission) {
        el.style.display = 'none'
      }
    } catch (error) {
      console.error('权限指令执行失败:', error)
    }
  }
} 